由於之後我們會解說到像是Gin搭配RDBMS或是Gin搭配Cache....等,因此在這章節我們將會寫好我們gin example所要用到的Dockerfile以及搭配的docker-compose。
FROM golang:latest
RUN mkdir -p /usr/local/go/src/ironman-2021
WORKDIR /usr/local/go/src/ironman-2021
ADD . /usr/local/go/src/ironman-2021
RUN go mod download
RUN go build ./main.go
EXPOSE 8080
CMD ["./main"]
$GOPATH
之下go mod download
,下載所有用到的第三方套件main.go
主程式檔對docker不熟者可以去參考我去年的鐵人賽文章,連結在此
https://ithelp.ithome.com.tw/users/20129737/ironman/3501
前半部分都是圍繞著docker以及docker-compose解說
version: '3.5'
services:
postgresql:
container_name: postgresql
image: postgres:12.7
healthcheck:
test: [ "CMD", "pg_isready", "-q", "-d", "postgres", "-U", "root" ]
timeout: 45s
interval: 10s
retries: 10
ports:
- "5432:5432"
environment:
- POSTGRES_USER=root
- POSTGRES_PASSWORD=password
- APP_DB_USER=ironman
- APP_DB_PASS=password
- APP_DB_NAME=gorm
volumes:
- ./db:/docker-entrypoint-initdb.d/
networks:
- backend-bridge
restart: always
redis:
container_name: redis
image: redis:latest
ports:
- "6379:6379"
networks:
- backend-bridge
restart: always
ironman-2021:
container_name: ironman-2021
ports:
- "8080:8080"
build:
context: ./
dockerfile: Dockerfile
command: ./main
restart: always
networks:
- backend-bridge
depends_on:
- postgresql
- redis
networks:
backend-bridge:
driver: bridge
volumes:
data: {}
env
extension file的形式匯入,而這個container會在之後的gorm
篇章使用到。以上部分也是如有不懂可以參考我去年鐵人賽文章!
https://ithelp.ithome.com.tw/users/20129737/ironman/3501
前半部分都是圍繞著docker以及docker-compose解說
最後則是main.go部分,它與day-16 branch比起來多了匯入.env
變數的部分!
package main
import (
"github.com/gin-gonic/gin"
"github.com/joho/godotenv"
"ironman-2021/app/config"
"os"
)
func main() {
envErr := godotenv.Load()
if envErr != nil {
panic(envErr)
}
port := os.Getenv("PORT")
app := gin.Default()
app.GET("/hc", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "health check",
})
})
config.RouteUsers(app)
err := app.Run(":" + port)
if err != nil {
panic(err)
}
}
.env
檔案的存在,沒有的話會出現 Error loading .env file
的錯誤,有的話則接下來就能讀取.env
之中的變數資料。這章節我們做了許許多多未來後端開發的事前準備,像是下個章節解說gorm時所要用到的postgresql
,以及所需吃到環境變數的godotenv
等,這也讓我們往後的開發事半功倍。
這章節的程式碼也會放在下方連結~
https://github.com/Neskem/Ironman-2021/tree/Day-17